#ifndef CHAT_ROOM_H
#define CHAT_ROOM_H

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <stdbool.h>
#include <errno.h>

#define NONE "\e[0m"
#define L_RED "\e[1;31m"

#define N 128
#define M 256

#define print(format,arg...) do{printf(L_RED format NONE,##arg);}while(0);
#define ERRLOG(errmsg) do{\
                                                            perror(errmsg);\
                                                            printf("file:%s,func:%s,line:%d\n",__FILE__,__func__,__LINE__);\
                                                            exit(-1);\
                                                            }while(0);

typedef struct{
    int code;
    char name[32];
    char text[N];
}MSG;

typedef struct node{
    char name[32];
    struct sockaddr_in addr;
    struct node *next;
}linklist;

linklist* Createlinklist();

void udpChatLogin(const int sockfd,MSG msg,linklist* h,struct sockaddr_in clientaddr);

void udpBroadCast(const int sockfd,MSG msg,linklist* h,struct sockaddr_in clientaddr);

void udpChatQuit(const int sockfd,MSG msg,linklist* h,struct sockaddr_in clientaddr);

void udpChatPrivate(const int sockfd,MSG msg,linklist* h);

#endif